const { request, clearAuth } = require('../../utils/request');
const { TOKEN_STORAGE_KEY } = require('../../config');
const pageBehavior = require('../../utils/pageBehavior');
const { navigateTo } = require('../../utils/navigation');
const StateManager = require('../../utils/state');

Page({
  behaviors: [pageBehavior],

  data: {
    tokenPresent: false,
    userInfo: {}
  },

  onLoad() {
    // 检查认证状态，如果未认证则跳转登录
    if (!this.requireAuth()) {
      return;
    }
    this.bootstrap();
  },

  onShow() {
    this.bootstrap();
    this.updateTabBar(3);
  },

  bootstrap() {
    const token = wx.getStorageSync(TOKEN_STORAGE_KEY);
    const snapshot = wx.getStorageSync('profile.snapshot') || {};
    
    // 如果有token或本地数据，都认为是已登录状态
    if (token || Object.keys(snapshot).length > 0) {
      this.setData({ tokenPresent: true });
      this.fetchProfile();
    } else {
      this.setData({
        tokenPresent: false,
        loading: false,
        userInfo: {}
      });
    }
  },

  async fetchProfile() {
    // 优先使用本地存储的数据（避免API失败导致退出）
    const snapshot = wx.getStorageSync('profile.snapshot') || {};
    const token = wx.getStorageSync(TOKEN_STORAGE_KEY);
    
    // 如果有本地数据，先显示本地数据（立即显示，不等待API）
    if (Object.keys(snapshot).length > 0) {
      const userInfo = this.normalizeUserInfo(snapshot);
      this.setData({ userInfo });
    } else {
      // 如果没有本地数据，使用开发模式的默认数据
      const devConfig = require('../../config/dev');
      if (devConfig.enabled && token && token.startsWith('dev_token_')) {
        const devUser = devConfig.devAccount.user;
        // 保存到本地，下次直接使用
        wx.setStorageSync('profile.snapshot', devUser);
        this.setData({ userInfo: this.normalizeUserInfo(devUser) });
        return;
      }
    }
    
    // 如果有token，尝试从API获取最新数据（后台更新，不阻塞显示）
    if (token && !token.startsWith('dev_token_')) {
      try {
        const res = await request({ 
          url: '/api/miniapp/profile', 
          method: 'GET',
          showErrorToast: false  // 不显示错误提示，避免干扰
        });
        
        const profile = res?.data || {};
        if (Object.keys(profile).length > 0) {
          // 更新本地数据
          const updatedSnapshot = { ...snapshot, ...profile };
          wx.setStorageSync('profile.snapshot', updatedSnapshot);
          // 更新显示
          this.setData({ userInfo: this.normalizeUserInfo(updatedSnapshot) });
        }
      } catch (error) {
        // API失败不影响显示，继续使用本地数据
        console.log('获取用户信息失败，使用本地数据:', error);
      }
    }
  },

  normalizeUserInfo(data) {
    return {
      realName: data.realName || data.name || data.nick || '',
      name: data.name || data.nick || '',
      studentNo: data.studentNo || '',
      candidateNo: data.candidateNo || '',
      college: data.college || '',
      major: data.major || '',
      className: data.className || '',
      phone: data.phone || '',
      ethnicity: data.ethnicity || data.nation || '',
      nation: data.nation || '',
      avatar: data.avatar || data.avatarUrl || ''
    };
  },

  goToLogin() {
    navigateTo('/pages/login/login');
  },

  handleEditProfile() {
    navigateTo('/pages/register/register');
  },

  async handleLogout() {
    const confirmed = await this.showConfirm({
      title: '确认退出',
      content: '确定要退出账号吗？退出后将生成临时登录码，可使用该码快速登录。'
    });

    if (confirmed) {
      // 生成临时登录码
      const tempCode = this.generateTempLoginCode();
      
      clearAuth();
      wx.removeStorageSync('profile.snapshot');
      this.setData({
        tokenPresent: false,
        userInfo: {}
      });
      
      // 显示临时登录码
      await this.showConfirm({
        title: '临时登录码已生成',
        content: `您的临时登录码：${tempCode}\n\n请在24小时内使用此码登录，过期后需重新获取。`,
        confirmText: '我知道了',
        cancelText: ''
      });
      this.showSuccess('已退出');
    }
  },

  // 生成临时登录码
  generateTempLoginCode() {
    // 生成6位随机数字字母组合的登录码
    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    let code = '';
    for (let i = 0; i < 6; i++) {
      code += chars.charAt(Math.floor(Math.random() * chars.length));
    }
    
    // 存储临时登录码，有效期24小时
    const expireTime = Date.now() + 24 * 60 * 60 * 1000; // 24小时后过期
    const tempLoginData = {
      code: code,
      expireTime: expireTime,
      createdAt: Date.now()
    };
    
    wx.setStorageSync('temp_login_code', tempLoginData);
    
    return code;
  },

  async handleShare() {
    const index = await StateManager.showActionSheet(['分享给朋友', '分享到朋友圈']);
    if (index !== undefined) {
      this.showError('分享功能开发中');
    }
  },

  async handleSettings() {
    const index = await StateManager.showActionSheet(['设置', '关于', '帮助']);
    const messages = ['设置功能开发中', '关于功能开发中', '帮助功能开发中'];
    if (index !== undefined && messages[index]) {
      this.showError(messages[index]);
    }
  },

  handleFeedback() {
    this.showError('意见反馈功能开发中');
  },

  handleCasLogin() {
    // 统一身份认证占位：后续将跳转至 https://authserver.qdhhc.edu.cn
    wx.showToast({
      title: 'CAS对接中，请稍后',
      icon: 'none'
    });
    console.log('CAS login placeholder -> https://authserver.qdhhc.edu.cn');
  },

  onImageError(e) {
    console.log('图片加载失败，使用默认图片');
    // 如果是头像加载失败，设置默认头像
    if (e.currentTarget.dataset.type === 'avatar') {
      this.setData({
        'userInfo.avatar': '/assets/default-avatar.png'
      });
    }
  }
});